package com.zyzd.pathdemo.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.LightingColorFilter;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import com.zyzd.pathdemo.R;


/**
 * Created by 李宗源 on 2017/5/3.
 */

public class ColorFilterView extends View {
    public Paint mPaint;
    private Bitmap mBitmap;

    private int padding = 12;
    //-------------1---------------------
    float[] colorMatrix = {
            1, 0, 0, 0, 0, //red
            0, 0, 0, 0, 0, //green
            0, 0, 1, 0, 0, //blue
            0, 0, 0, 1, 0 //alpha
    };

    private ColorMatrixColorFilter mLightingColorFilter= new ColorMatrixColorFilter(colorMatrix);

    //-------------2---------------------
    private ColorMatrix colorMatrixs = new ColorMatrix();
    private ColorMatrixColorFilter matrixColorFilter[] = new ColorMatrixColorFilter[24];
    //-------------3---------------------
    private LightingColorFilter[] mLightingColorFilters =  new LightingColorFilter[8];
    private int length = PorterDuff.Mode.values().length;
    private PorterDuffColorFilter mPorterDuffColorFilters[] = new PorterDuffColorFilter[length];

    public ColorFilterView(Context context) {
        this(context, null);
    }

    public ColorFilterView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public ColorFilterView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_physician_team);

        //-------------1-------------
//        for (int i = 0; i < 8; i++) {
//            mPaint.setColorFilter(mLightingColorFilter);
//            canvas.drawBitmap(mBitmap,
//                    (i % 4) * (mBitmap.getWidth() + padding), (i / 4)
//                            * (mBitmap.getHeight() + padding), mPaint);
//        }

        //-------------2-1-------------
//        for (int i = 0; i < 24; i++) {
//            if (i < 8)
//                colorMatrixs.setScale(i * .1f, i * .1f, i * .1f, i * .1f);
//            else if (i < 16)
//                colorMatrixs.setScale(i * .1f, i * .1f, i * .1f, i * .1f);
//            else
//                colorMatrixs.setScale(i * .1f, i * .1f, i * .1f, i * .1f);
//            matrixColorFilter[i] = new ColorMatrixColorFilter(colorMatrixs);
//        }
        //-------------2-2-------------
//        for (int i = 0; i < 24; i++) {
//            if (i < 8)
//                colorMatrixs.setScale(i * .1f, i * .3f, i * .9f, i * .1f);
//            else if (i < 16)
//                colorMatrixs.setScale(i * .1f, i * .3f, i * .9f, i * .1f);
//            else
//                colorMatrixs.setScale(i * .1f, i * .3f, i * .9f, i * .1f);
//            matrixColorFilter[i] = new ColorMatrixColorFilter(colorMatrixs);
//        }
//        -------------2-3-------------
        //其中axis为0时表示的是红色分量旋转的角度，为1时是绿色分量旋转的角度，为2时是蓝色分量旋转的角度，
//        for (int i = 0; i < 24; i++) {
//            if (i < 8)
//                colorMatrixs.setRotate(0, i*50);
//            else if (i < 16)
//                colorMatrixs.setRotate(1, i*50);
//            else
//                colorMatrixs.setRotate(2, i*50);
//            matrixColorFilter[i] = new ColorMatrixColorFilter(colorMatrixs);
//        }
//        -------------2-4-------------
//        for (int i = 0; i < 24; i++) {
//            if (i < 8)
//                colorMatrixs.setRotate(0, i*50);
//            else if (i < 16)
//                colorMatrixs.setRotate(1, (i%8)*50);
//            else
//                colorMatrixs.setRotate(2, (i%8)*50);
//            matrixColorFilter[i] = new ColorMatrixColorFilter(colorMatrixs);
//        }
//        -------------2-4-------------
//        //再看另一个方法setSaturation(float sat)，代表的是饱和度，其中0是灰色，1是正常
//        for (int i = 0; i < 24; i++) {
//            if (i < 8)
//                colorMatrixs.setSaturation(i*.2f);
//            else if (i < 16)
//                colorMatrixs.setSaturation(i*.5f);
//            else
//                colorMatrixs.setSaturation(i*2f);
//            matrixColorFilter[i] = new ColorMatrixColorFilter(colorMatrixs);
//        }

        //-------------3-1 ----------------
        //不变
//        mLightingColorFilters[0] = new LightingColorFilter(0xFFFFFFFF,
//                0x00000000);
//        //去掉红色
//        mLightingColorFilters[1] = new LightingColorFilter(0xFF00FFFF,
//                0x00000000);
//        //去掉绿色
//        mLightingColorFilters[3] = new LightingColorFilter(0xFFFF00FF,
//                0x00000000);
//        //去掉蓝色
//        mLightingColorFilters[4] = new LightingColorFilter(0xFFFFFF00,
//                0x00000000);
//        //增加红色
//        mLightingColorFilters[5] = new LightingColorFilter(0xFFFFFFFF,
//                0x00560000);
//        //增加绿色
//        mLightingColorFilters[6] = new LightingColorFilter(0xFFFFFFFF,
//                0x00006400);
//        //增加蓝色
//        mLightingColorFilters[7] = new LightingColorFilter(0xFFFFFFFF,
//                0x00000056);

        int i = 0;
        for (PorterDuff.Mode e : PorterDuff.Mode.values())
            mPorterDuffColorFilters[i++] = new PorterDuffColorFilter(Color.YELLOW,
                    e);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //-------------1-------------
//        for (int i = 0; i < 8; i++) {
//            mPaint.setColorFilter(mLightingColorFilter);
//            canvas.drawBitmap(mBitmap,
//                    (i % 4) * (mBitmap.getWidth() + padding), (i / 4)
//                            * (mBitmap.getHeight() + padding), mPaint);
//        }

        //-------------2-------------
//        for (int i = 0; i < 24; i++) {
//            mPaint.setColorFilter(matrixColorFilter[i]);
//            canvas.drawBitmap(mBitmap,
//                    (i % 4) * (mBitmap.getWidth() + padding), (i / 4)
//                            * (mBitmap.getHeight() + padding), mPaint);
//        }

        //-------------3-------------
//        for (int i = 0; i < 8; i++) {
//            mPaint.setColorFilter(mLightingColorFilters[i]);
//            canvas.drawBitmap(mBitmap,
//                    (i % 4) * (mBitmap.getWidth() + padding), (i / 4)
//                            * (mBitmap.getHeight() + padding), mPaint);
//        }
        for (int i = 0; i < length; i++) {
            mPaint.setColorFilter(mPorterDuffColorFilters[i]);
            canvas.drawBitmap(mBitmap,
                    (i % 4) * (mBitmap.getWidth() + padding), (i / 4)
                            * (mBitmap.getHeight() + padding), mPaint);
        }
    }

}
